#include <QMessageBox>
#include "Const.h"
#include "Protocol.h"
#include "RegWindow.h"
#include "ui_RegWindow.h"

/**
 * 构造方法。
 * @param parent    父窗口
 */
RegWindow::RegWindow(QWidget* parent) :
    QDialog(parent),
    ui(new Ui::RegWindow) {
    ui->setupUi(this);

    // 设置最大用户名长度和最大密码长度
    ui->editPassword->setMaxLength(ImProtocol::MAX_PASSWORD_LEN);
    ui->editRepassword->setMaxLength(ImProtocol::MAX_PASSWORD_LEN);
    ui->editUsername->setMaxLength(ImProtocol::MAX_USERNAME_LEN);

    // 为列表控件添加图标
    for (int i = 0; i < Const::ICON_COUNT; i++) {
        QString iconFilePath = QString(Const::ICON_FILE_PATH).arg(i, 2, 10, QLatin1Char('0'));
        QIcon icon(iconFilePath);
        QListWidgetItem* item = new QListWidgetItem(icon, NULL);
        ui->listViewIcons->addItem(item);
    }
}

/**
 * 析构方法。
 */
RegWindow::~RegWindow() {
    delete ui;
}

/**
 * 获取头像索引。
 * @return 头像索引
 */
int RegWindow::getIconIndex() {
    return mIconIndex;
}

/**
 * 获取密码。
 * @return 密码
 */
const char* RegWindow::getPassword() {
    return mPassword.toStdString().c_str();
}

/**
 * 获取用户名。
 * @return 用户名
 */
const char* RegWindow::getUsername() {
    return mUsername.toStdString().c_str();
}

/**
 * "取消"按钮的单击响应方法。
 */
void RegWindow::on_buttonCancel_clicked() {
    QDialog::reject();
}

/**
 * "确定"按钮的单击响应方法。
 */
void RegWindow::on_buttonOK_clicked() {
    // 检查用户名是否为空
    QString username(ui->editUsername->text());
    if (username.isEmpty()) {
        QMessageBox::critical(this, " ", tr("IDS_USERNAME_EMPTY"));
        ui->editUsername->setFocus();
        return;
    }

    // 检查密码是否为空
    QString password(ui->editPassword->text());
    if (password.isEmpty()) {
        QMessageBox::critical(this, " ", tr("IDS_PASSWORD_EMPTY"));
        ui->editPassword->setFocus();
        return;
    }

    // 检查两次密码是否一致
    QString repassword(ui->editRepassword->text());
    if (password != repassword) {
        QMessageBox::critical(this, " ", tr("IDS_PASSWORD_NOT_EQUAL"));
        ui->editRepassword->setFocus();
        return;
    }

    // 检查头像索引
    QListWidgetItem* item = ui->listViewIcons->currentItem();
    if (item == nullptr) {
        QMessageBox::critical(this, nullptr, tr("IDS_ICON_NOT_SELECT"));
        ui->listViewIcons->setFocus();
        return;
    }

    // 保存用户信息
    mUsername = username;
    mPassword = password;
    mIconIndex = ui->listViewIcons->currentRow();

    // 关闭窗口
    QDialog::accept();
}
